package com.tedu;

import com.tedu.entity.Bullet;
import com.tedu.entity.Dir;
import com.tedu.entity.TankEntity;

import javax.swing.*;
import java.awt.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.Random;

/**
 * 游戏游戏页面
 * 具体实现游戏逻辑
 */
public class TankJpanel extends JPanel {

    //游戏背景1.获取Toolkit工具对象；2.获取图片路径；3.获取图片对象
    private Image bg = Toolkit.getDefaultToolkit().getImage(TankJpanel.class.getResource("/ab.png"));
    private Image tankUp = Toolkit.getDefaultToolkit().getImage(TankJpanel.class.getResource("/tank.png"));
    //定义敌方坦克集合
    private ArrayList<TankEntity> enemy = new ArrayList<>();

    //子弹背景图片
    private Image bullet_bg = Toolkit.getDefaultToolkit().getImage(TankJpanel.class.getResource("/bullet.png"));
    private Image bullet_bg_R = Toolkit.getDefaultToolkit().getImage(TankJpanel.class.getResource("/bullet_R.png"));
    private Image bullet_bg_D = Toolkit.getDefaultToolkit().getImage(TankJpanel.class.getResource("/bullet_D.png"));
    private Image bullet_bg_L = Toolkit.getDefaultToolkit().getImage(TankJpanel.class.getResource("/bullet_L.png"));


    //子弹集合(敌方子弹)
    private ArrayList<Bullet> bulletArrayList = new ArrayList<>();
    //声明玩家坦克
    public TankEntity player = new TankEntity(400,550,72,72,bg,Dir.down);
    //请问：玩家坦克  按键控制

    //构造方法
    public TankJpanel(){
        //初始化敌方坦克
        TankEntity enemy1 = new TankEntity(10,100,72,72,tankUp, Dir.up);
        enemy.add(enemy1);
        TankEntity enemy2 = new TankEntity(100,100,72,72,tankUp, Dir.up);
        enemy.add(enemy2);
        TankEntity enemy3 = new TankEntity(200,300,72,72,tankUp, Dir.up);
        enemy.add(enemy3);
        TankEntity enemy4 = new TankEntity(300,400,72,72,tankUp, Dir.up);
        enemy.add(enemy4);
        TankEntity enemy5 = new TankEntity(400,100,72,72,tankUp, Dir.up);
        enemy.add(enemy5);
        TankEntity enemy6 = new TankEntity(500,100,72,72,tankUp, Dir.up);
        enemy.add(enemy6);
        TankEntity enemy7 = new TankEntity(600,300,72,72,tankUp, Dir.up);
        enemy.add(enemy7);
        TankEntity enemy8 = new TankEntity(700,400,72,72,tankUp, Dir.up);
        enemy.add(enemy8);
        TankEntity enemy9 = new TankEntity(800,100,72,72,tankUp, Dir.up);
        enemy.add(enemy9);
        TankEntity enemy10 = new TankEntity(300,200,72,72,tankUp, Dir.up);
        enemy.add(enemy10);

        //对窗口键盘做监听，移动玩家坦克


    }






    //重写父类方法paint方法，绘制游戏


    @Override
    public void paint(Graphics g) {
        super.paint(g);
        //画背景 ，重新加载，
        //bg:绘制图片对象，x,y:绘制左上角的位置，width,height:绘制的大小，
        g.drawImage(bg,0,0,880,660,null);
        //绘制坦克、移动坦克
        drawEnemyTank(g);
        //绘制子弹+移动
        drawEnemyBullet(g);
        //绘制玩家坦克
        player.draw(g);

    }

    /**
     * 绘制子弹
     * @param g
     */
    private void drawEnemyBullet(Graphics g) {
        //取出每一个子弹
        for (int i = 0; i < bulletArrayList.size(); i++) {
            Bullet bullet = bulletArrayList.get(i);
            //移动
            bullet.move();
            //绘制
            bullet.draw(g);
            //子弹移动屏幕外，移除数组




        }
    }

    /**
     * 绘制敌方坦克
     * @param g
     */
    public void drawEnemyTank(Graphics g){
        for (int i = 0; i < enemy.size(); i++) {
            TankEntity tankEntity = enemy.get(i);//取出坦克集合中每一个坦克

            if(new Random().nextInt(20)<1){
                //发生子弹  流
                Bullet bullet;
                switch (tankEntity.getDir()){
                    case up:
                        bullet  = new Bullet(tankEntity.getX()+tankEntity.getW()/2-6,tankEntity.getY(),
                                11,30,
                                tankEntity.getDir(),bullet_bg);
                        //发射
                        bulletArrayList.add(bullet);
                        break;
                    case down:
                         bullet = new Bullet(tankEntity.getX()+tankEntity.getW()/2-6,tankEntity.getY()+60,
                                11,30,
                                tankEntity.getDir(),bullet_bg_D);
                        //发射
                        bulletArrayList.add(bullet);
                        break;
                    case left:
                        bullet = new Bullet(tankEntity.getX()+tankEntity.getW()/2,tankEntity.getY()+72/2,
                                30,11,
                                tankEntity.getDir(),bullet_bg_L);
                        //发射
                        bulletArrayList.add(bullet);
                        break;
                    case right:
                        bullet = new Bullet(tankEntity.getX()+tankEntity.getW()/2,tankEntity.getY()+36,
                                30,11,
                                tankEntity.getDir(),bullet_bg_R);
                        //发射
                        bulletArrayList.add(bullet);
                        break;
                }

            }




            //移动坦克
            tankEntity.move();
            //判断坦克是否与其他坦克相撞
            for (int j = 0; j < enemy.size(); j++) {
                TankEntity tankEntity1 = enemy.get(j);
                if(tankEntity==tankEntity1){  //相同一个坦克
                    continue;// 退出本次循环   break  对比
                }
                boolean onRect = tankEntity.isOnRect(tankEntity1.getX(), tankEntity1.getY(), tankEntity1.getW(), tankEntity1.getH());
                if(onRect){
                    //相撞，坦克修改方向   tankEntity
                    tankEntity.dir();
                    break;
                }

            }
            //画坦克
            tankEntity.draw(g);

        }

    }

}
